/**
 * @ClassName: StatistisTool 统计数据处理公共类
 * @author 831
 * @date 2018/12/12
 */
package com.fzrskj.cloud.free.user.tool;

import com.fzrskj.cloud.free.user.bean.statistics.Statistics;
import ms.core.tool.DateTimeTool;
import ms.core.tool.StrTool;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import java.util.List;

public class StatistisTool {

    /*
     * 将数据格式化为折线图使用的数据
     * @param objs 按格式取出的统计数据列表
     * @param startTime 开始时间 例如 2018-01-01
     * @param endTime 截止时间 例如 2018-01-31
     *  add by wzj 2018/12/12
     */
    public static String getLineDate(List<Statistics> objs, String startTime, String endTime){
        JSONObject ret = new JSONObject();
        JSONArray key = new JSONArray();
        JSONArray val = new JSONArray();
        String time = startTime;
        Boolean flag = false; //是否处理
        do {
            if (StrTool.isBlankStr(startTime) || StrTool.isBlankStr(endTime)) break;
            
            Integer sumDay = DateTimeTool.daysBetween(DateTimeTool.strToDate(startTime), DateTimeTool.strToDate(endTime));
            
            if (sumDay < 1) break;
            
            for (int i = 0;i < sumDay; i++) {
                flag = false;
                String addTime = time.substring(5, time.length());
                for (Statistics obj: objs) {
                    if (obj.getDateTime().equals(time)){
                        flag = true;
                        key.add(addTime);
                        val.add(obj.getCount());
                    }
                }
                if (!flag){
                    key.add(addTime);
                    val.add(0);
                }

                if (time.equals(endTime)) break; //到截止时间推出
                time = StatistisTool.getNextDay(time); //日期 +1
            }
        } while (false);
        ret.put("data", key);
        ret.put("value", val);
        return  ret.toString();
    }

    /*
     * 字符串日期添加一天
     * @param day 字符串日期  例如 2018-01-01
     *  add by wzj 2018/12/12
     */
    public static String getNextDay(String day){
        return DateTimeTool.dateToDateString(DateTimeTool.incDay(DateTimeTool.strToDate(day), 1));
    }

    /*
     * 获取数据库查询时的时间格式
     * @param type  H 小时 D 天 M 月 Y 年
     * 默认天
     */
    public static String getSqlDateFormat(String type){
        String format = "";
        switch (type){
            case "H":
                format = "%Y-%m-%d %H";
                break;
            case "D":
                format = "%Y-%m-%d";
                break;
            case "M":
                format = "%Y-%m";
                break;
            case "Y":
                format = "%Y";
                break;
            default:
                format = "%Y-%m-%d";
                break;
        }
        return format;
    }
}
